package com.samba.beans;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

import javax.ejb.Local;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.samba.entites.CreditProjetUtilisateur;
import com.samba.entites.Projet;
import com.samba.entites.Utilisateur;
import com.samba.exceptions.UserNotLoggedException;
import com.samba.sessions.CartServiceDAO;


@Stateful
@Local({CartServiceDAO.class})
public class CartServiceBean  implements CartServiceDAO {
    
    @PersistenceContext(unitName = "GestionMicroCredit")
    private EntityManager objectExchangeEM;
    
    private Collection<Projet> collectionProjets;
    
    
    public CartServiceBean()
    {
    	collectionProjets = new ArrayList<Projet>();
    }

    public void add(int projetId) {
    	
    	System.out.println("add : " + projetId);
    	
    	Iterator<Projet> it = collectionProjets.iterator();
    	
    	while(it.hasNext())
    	{
    		Projet res = it.next();
    		if(res.getId() == projetId)
    		{
    			return;
    		}
    	}
    	
    	Query q = objectExchangeEM.createNamedQuery("findAllAvailableProjets");
    	q.setParameter("etat",CreditProjetUtilisateur.EtatFinancementCredit.FINANCE);
    	q.setParameter("id", projetId);
    	Projet projetAajouter = (Projet) q.getSingleResult();
    	if(projetAajouter != null)
    	{
    		collectionProjets.add(projetAajouter);
    	}
		
	}
    public void remove(int projetId) {
    	Iterator<Projet> it = collectionProjets.iterator();
    	while(it.hasNext())
    	{
    		Projet res = it.next();
    		if(res.getId() == projetId)
    		{
    			it.remove();
    			return;
    		}
    	}
		
	}
    public void resetCart() {
		collectionProjets.clear();
	}

	public void validateCart(int utilisateurId) throws UserNotLoggedException {
		
		Utilisateur user =objectExchangeEM.find(Utilisateur.class, utilisateurId);
		
		CreditProjetUtilisateur cpu = new CreditProjetUtilisateur();
		if(user == null)
		{
			throw new UserNotLoggedException();
		}
		for(Projet prj : collectionProjets)
		{
		   if(prj == cpu.getProjet() && cpu.est_En_Attente_Finanacement())
		   {
			   cpu.setProjet(prj);
			   cpu.setUtlisateur(user);
			   objectExchangeEM.persist(cpu);
			   // envoir email
		   }
			
		}
	}
	public Collection<Projet> listCart() {
		
		return collectionProjets;
	}

	
    
 
}
